package com.zsj.bootjedis.service.impl;

import com.zsj.bootjedis.config.jedis.JedisUtil;
import com.zsj.bootjedis.po.User;
import com.zsj.bootjedis.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.HashMap;
import java.util.Map;

@Service
@Slf4j
public class UserServiceImpl implements UserService {

    @Autowired
    private JedisPool jedisPool;

    @Autowired
    private JedisUtil jedisUtil;

    /**
     * Redis有什么命令，Jedis就有什么方法
     * Redis String 类型
     * 需求： 用户输入一个key，先判断Redis是否存在该数据
     * 如果存在，在Redis中进行查询，返回
     * 如果不存在，在MYSQL数据库中查询，并将结果赋给Redis，并返回
     */
    @Override
    public String getString(String key) {
        String value;
        // 1 获取jedis对象
        Jedis jedis = jedisPool.getResource();

        // 2 执行操作
        if (jedis.exists(key)) {
            log.info("查询Redis中的数据，key={}", key);
            value = jedis.get(key);
        } else {
            log.info("查询MYSQL数据库");
            value = "MYSQL";
            jedis.set(key, value);
            return value;
        }

        // 3 关闭连接
        jedis.close();

        return value;
    }

    /**
     * 根据用户id查询用户属性
     */
    @Override
    public User getHash(String id) {
        User user = new User();
        String key = "user:" + id;
        // 1 得到jedis对象
        Jedis jedis = jedisUtil.getJedis();
        if (jedis.exists(key)) {
            log.info("查询Redis中的数据，key={}", key);
            Map<String, String> map = jedis.hgetAll(key);
            log.info("name={}", jedis.hget(key, "name"));
            log.info("age={}", jedis.hget(key, "age"));
            user = User.builder()
                    .id(id)
                    .age(Integer.valueOf(map.get("age")))
                    .name(map.get("name"))
                    .build();
        } else {
            user.setId(id);
            user.setName("哈哈动画");
            user.setAge(2132);
            log.info("查询MYSQL数据库，user={}", user);
            Map<String, String> map = new HashMap<>();
            map.put("id", user.getId());
            map.put("name", user.getName());
            map.put("age", String.valueOf(user.getAge()));
            jedis.hset(key, map);
        }

        jedisUtil.close(jedis);
        return user;
    }
}
